package com.cj.designpattern.tempmethod;

/**
 * ClassName: AbstractDesignCycle <br/>
 * Function: 程序设计流程，设计统一的流程 <br/>
 * date: 2018/04/28 16:59 <br/>
 *
 * @author chenj
 * @version 1.0.0
 * @since JDK 1.8
 */
public abstract class AbstractDesignCycle {

    /**
     * 钩子方法，是否需要概要设计
     */
    protected boolean isNeedConceptualDesign() {
        return true;
    }

    /**
     * 需求分析
     */
    protected abstract void needAnalysis();

    /**
     * 概要设计
     */
    protected abstract void conceptualDesign();

    /**
     * 详细设计
     */
    protected abstract void detailedDesign();

    /**
     * 开发
     */
    protected abstract void coding();

    /**
     * 测试
     */
    protected abstract void testSystem();

    /**
     * 发布
     */
    protected abstract void publishSystem();


    public void templateDesignSystem(){
        System.out.println("------------开始开发----------");
        needAnalysis();
        if (isNeedConceptualDesign()) {
            conceptualDesign();
        }
        detailedDesign();
        coding();
        testSystem();
        publishSystem();
        System.out.println("------------开发完毕-----------");
    }
}
